﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using vudu.Logica.Clases;
using vudu.EnlaceDatos.SqlServer;

namespace vudu.Pruebas
{
    [TestFixture]
    public class PruebaEnlaceDeDatosSeccionMateria
    {
        #region Atributos y constructor grupo 5
        private SqlServerSeccionMateria _conector;
        private SeccionMateria _dePrueba;

        public PruebaEnlaceDeDatosSeccionMateria()
        {
            //cosas
        }
        #endregion Atributos y constructor grupo 5
      

        #region prueba de consultar seccion profesores, la hizo el grupo 1 , la necesitamos para probar la funcion
        [Test]
        public void ConsultarSeccionProfesores()
        {
            SqlServerSeccionMateria sqlServerSeccionMateria = new SqlServerSeccionMateria();
            Profesor profesor = new Profesor();
            profesor.Cedula = 18011724;

            List<SeccionMateria> seccionMaterias = sqlServerSeccionMateria.ConsultarSeccionProfesor(18011724);

            Assert.IsNotNull(seccionMaterias);
            Assert.AreEqual(seccionMaterias.ElementAt(0).Codigo, 1);
            Assert.AreEqual(seccionMaterias.ElementAt(1).Codigo, 3);
        }
        #endregion

        #region pruebas del grupo 5

        [SetUp]
        public void Init()
        {
            _conector = new SqlServerSeccionMateria();
            _dePrueba = new SeccionMateria();
        }

        [Test]
        public void PruebaAgregarSeccionMateria()
        {
            SeccionMateria seccion = new SeccionMateria();
            seccion.Codigo = 1;
            seccion.PeriodoAcademico = "1";
            seccion.Materia.Codigo = 1;
            seccion.Profesor.Cedula = 6789000;
            bool seInserto = _conector.AgregarSeccionMateria(seccion);
            seccion = _conector.ConsultarSeccionParticular(seccion.Codigo.ToString(), seccion.PeriodoAcademico, seccion.Materia.Codigo.ToString(), seccion.Profesor.Cedula.ToString());
            Assert.True(seInserto);
            Assert.IsNotNull(seccion);
        }

        [Test]
        public void PruebaConsultarSeccionParticular()
        {
            _dePrueba = _conector.ConsultarSeccionParticular("1", "1", "1", "6789000");
            Assert.AreEqual(_dePrueba.Codigo, 1);
            Assert.AreEqual(_dePrueba.Materia.Codigo, 1);
            Assert.AreEqual(_dePrueba.Profesor.Cedula, 6789000);
            Assert.IsNotNull(_dePrueba);
            _dePrueba = _conector.ConsultarSeccionParticular("0", "0", "0", "0");
            Assert.Null(_dePrueba);
        }

        [Test]
        public void PruebaConsultarSeccionesMateria()
        {
            List<SeccionMateria> secciones = _conector.ConsultarSeccionesMateria();
            Assert.True(secciones.Count > 0);
        }

        [Test]
        public void PruebaConsultarSeccionesDeUnaMateria()
        {
            Materia m = new Materia();
            m.Nombre = "Desarrollo del Software";
            List<SeccionMateria> secciones = _conector.ConsultarSeccionesDeUnaMateria(m);
            Assert.True(secciones.Count > 0);
        }

        [Test]
        public void PruebaConsultarSeccionesDeUnProfesor()
        {
            Profesor p = new Profesor();
            p.Cedula = 6789000;
            List<SeccionMateria> secciones = _conector.ConsultarSeccionesDeUnProfesor(p);
            Assert.True(secciones.Count > 0);
        }

        [Test]
        public void PruebaConsultarSeccionMateria()
        {
            _dePrueba = _conector.ConsultarSeccionMateria(1);
            Assert.AreEqual(_dePrueba.Codigo, 1);
            Assert.IsNotNull(_dePrueba);
            _dePrueba = _conector.ConsultarSeccionMateria(0);
            Assert.Null(_dePrueba);
        }

        [Test]
        public void PruebaPeriodoSeccion()
        {
            String periodo = _conector.PeriodoSeccion("1");
            String prueba = "2/10/2011 - 30/1/2012";
            Assert.AreEqual(prueba, periodo);
            Assert.AreNotEqual(periodo, "2011");
        }

        [Test]
        public void PruebaPeriodos()
        {
            List<String> lista = _conector.Periodos();
            Assert.True(lista.Count > 0);
        }

        [Test]
        public void PruebaExisteLaSeccion()
        {
            SeccionMateria seccion = new SeccionMateria();
            seccion.Codigo = 1;
            seccion.PeriodoAcademico = "1";
            seccion.Materia.Codigo = 1;
            seccion.Profesor.Cedula = 6789000;
            bool seInserto = _conector.ExisteLaSeccion(seccion.Profesor, seccion.Materia, seccion.Codigo, seccion.PeriodoAcademico);
            Assert.True(seInserto);
            seccion.Materia.Codigo = 0;
            seccion.Profesor.Cedula = 0;
            seInserto = _conector.ExisteLaSeccion(seccion.Profesor, seccion.Materia, 0, "0");
            Assert.False(seInserto);
        }

        [Test]
        public void PruebaEliminarSeccionMateria()
        {
            SeccionMateria seccion = new SeccionMateria();
            seccion.Codigo = 1;
            seccion.PeriodoAcademico = "1";
            seccion.Materia.Codigo = 1;
            seccion.Profesor.Cedula = 6789000;
            seccion = _conector.ConsultarSeccionParticular(seccion.Codigo.ToString(), seccion.PeriodoAcademico, seccion.Materia.Codigo.ToString(), seccion.Profesor.Cedula.ToString());
            int respuesta = new SqlServerSeccionMateria().EliminarSeccionMateria(seccion);
            SeccionMateria prueba = new SqlServerSeccionMateria().ConsultarSeccionMateria(seccion.IdSeccionMateria);
            Assert.AreEqual(respuesta, 1);
            Assert.AreNotEqual(respuesta, 0);
            Assert.IsNull(prueba);
        }

        [Test]
        public void PruebaModificarSeccion()
        {
            SeccionMateria dePrueba = new SeccionMateria();
            dePrueba.IdSeccionMateria = 2;
            List<String[]> modificaciones = new List<String[]>();
            String[] profesor = new String[3];
            profesor[1] = "Profesor";
            profesor[2] = "4097234";
            String[] numero = new String[3];
            numero[1] = "Numero";
            numero[2] = "2";


            modificaciones.Add(profesor);
            modificaciones.Add(numero);

            bool respuesta = new SqlServerSeccionMateria().ModificarSeccionMateria(modificaciones, dePrueba);
            SeccionMateria prueba = new SqlServerSeccionMateria().ConsultarSeccionMateria(2);
            Assert.True(respuesta);

        }
        #endregion pruebas del grupo 5 
    }
}